<?php
namespace modules\post\form;

use idea\saf\sl\Form;
use helper\ErrorNo;
use helper\Util;
use library\Validator;

/**
 * Posts class file
 * posts表单管理类
 * @author 宋欢 <iphper@yeah.net>
 * @version $Id: Posts.php 1 2013-05-18 14:58:59Z huan.song $
 * @package modules.post.form
 * @since 1.0
 */
class Posts extends Form
{
	/**
	 * @var integer 文档标题最大长度
	 */
	const TITLE_MAX_LENGTH = 50;
	
	/**
	 * @var string 是否生成静态页面：已生成
	 */
	const IS_HTML_Y = 'y';
	
	/**
	 * @var string 是否生成静态页面：动态访问
	 */
	const IS_HTML_N = 'n';
	
	/**
	 * @var array 寄存是否生成静态页面选项
	 */
	public static $isHtmls = array(
		self::IS_HTML_N => '动态访问',
		self::IS_HTML_Y => '已生成',
	);

	/**
	 * @var string 文档标签：头条
	 */
	const POST_FLAGS_H = 'h';
	
	/**
	 * @var string 文档标签：推荐
	 */
	const POST_FLAGS_C = 'c';
	
	/**
	 * @var string 文档标签：跳转
	 */
	const POST_FLAGS_J = 'j';

	/**
	 * @var array 寄存文档标签选项
	 */
	public static $flags = array(
		self::POST_FLAGS_H => '头条',
		self::POST_FLAGS_C => '推荐',
		self::POST_FLAGS_J => '跳转',
	);
	
	/**
	 * @var string 文档状态：开放浏览
	 */
	const POST_STATUS_O = 'o';
	
	/**
	 * @var string 文档状态：待审核
	 */
	const POST_STATUS_C = 'c';
	
	/**
	 * @var string 文档状态：回收站
	 */
	const POST_STATUS_T = 't';
	
	/**
	 * @var array 寄存文档状态选项
	 */
	public static $statuses = array(
		self::POST_STATUS_O => '开放浏览',
		self::POST_STATUS_C => '待审核',
		self::POST_STATUS_T => '回收站',
	);
	
	/**
	 * @var string 是否允许评论：允许
	 */
	const ALLOW_COMMENT_Y = 'y';
	
	/**
	 * @var string 是否允许评论：禁止
	 */
	const ALLOW_COMMENT_N = 'n';
	
	/**
	 * @var array 寄存是否允许评论选项
	 */
	public static $allowComments = array(
		self::ALLOW_COMMENT_Y => '允许',
		self::ALLOW_COMMENT_N => '禁止',
	);
	
	/**
	 * @var array 寄存表的所有字段
	 */
	protected $_attributes = array(
		'post_id' => array(
			'label' => '文档ID',
			'type' => 'hidden'
		),

		'post_title' => array(
			'label' => '文档标题',
			'type' => 'text',
			'rule' => array(
				Validator::NOT_EMPTY => array(
					true,
					'请填写文档标题.'
				),
				Validator::MAX_LENGTH => array(
					self::TITLE_MAX_LENGTH,
					'文档标题长度由小于50个字符组成.'
				)
			)
		),

		'post_content' => array(
			'label' => '内容',
			'type' => 'textarea',
		),

		'category_id' => array(
			'label' => '所属类别',
			'type' => 'select',
			'rule' => array(
				Validator::INTEGER => array(
					true,
					'请选择所属类别.'
				)
			)
		),

		'post_keywords' => array(
			'label' => '内容关键字',
			'type' => 'textarea'
		),

		'post_description' => array(
			'label' => '内容摘要',
			'type' => 'textarea'
		),

		'post_order' => array(
			'label' => '排序',
			'type' => 'text',
			'rule' => array(
				Validator::NUMERIC => array(
					true,
					'排序必须是数字.'
				)
			)
		),

		'admin_id' => array(
			'label' => '发表人',
			'type' => 'hidden'
		),

		'modify_id' => array(
			'label' => '最后一次更新人',
			'type' => 'hidden'
		),

		'access_count' => array(
			'label' => '访问次数',
			'type' => 'text',
			'rule' => array(
				Validator::NUMERIC => array(
					true,
					'访问次数必须是数字.'
				)
			)
		),

		'dt_created' => array(
			'label' => '发表时间',
			'type' => 'text'
		),

		'dt_modify' => array(
			'label' => '最近一次修改时间',
			'type' => 'text'
		),

		'is_html' => array(
			'label' => '生成静态页面',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::IS_HTML_Y,
						self::IS_HTML_N
					),
					'必须选中是否生成静态页面项，值只能是y或n.'
				)
			)
		),

		'post_flags' => array(
			'label' => '所属标签',
			'type' => 'checkbox'
		),

		'little_picture' => array(
			'label' => '缩略图',
			'type' => 'hidden'
		),
		
		'post_url' => array(
			'label' => '跳转链接',
			'type' => 'text'
		),
		
		'post_status' => array(
			'label' => '文档状态',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::POST_STATUS_O,
						self::POST_STATUS_C,
						self::POST_STATUS_T
					),
					'必须选中文档状态项，值只能是o、c或t.'
				)
			)
		),
		
		'allow_comment' => array(
			'label' => '允许评论',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::ALLOW_COMMENT_Y,
						self::ALLOW_COMMENT_N
					),
					'必须选中是否允许评论项，值只能是y或n.'
				)
			)
		)
	);
	
	/**
	 * 将所有类别值组成Select表单元素
	 * @return array
	 */
	public function getCategoryIdOptions($hasTopLevel = true)
	{
		return Util::getForm('Categories', 'post')->getCategoriesOptions(0, $hasTopLevel);
	}
	
	/**
	 * 获取是否生成静态页面字段表单元素
	 * @return array
	 */
	public function getIsHtmlOptions()
	{
		return $this->getOptions(self::$isHtmls);
	}

	/**
	 * 获取文档标签字段表单元素
	 * @return array
	 */
	public function getPostFlagsOptions()
	{
		return $this->getOptions(self::$flags, -1);
	}

	/**
	 * 获取文档状态字段表单元素
	 * @param integer $chkPos
	 * @return array
	 */
	public function getPostStatusOptions($chkPos = 0)
	{
		return $this->getOptions(self::$statuses, $chkPos);
	}
	
	/**
	 * 获取是否允许评论字段表单元素
	 * @return array
	 */
	public function getAllowCommentOptions()
	{
		return $this->getOptions(self::$allowComments);
	}
	
	/**
	 * 通过是否生成静态页面选项值，获取是否生成静态页面描述
	 * @param string $value
	 * @return string
	 */
	public function getIsHtmlLabel($value)
	{
		return isset(self::$isHtmls[$value]) ? self::$isHtmls[$value] : '';
	}
	
	/**
	 * 通过文档标签选项值，获取文档标签描述
	 * @param string $value
	 * @return string
	 */
	public function getPostFlagsLabel($value)
	{
		return isset(self::$flags[$value]) ? self::$flags[$value] : '';
	}
	
	/**
	 * 通过文档标签选项值，获取文档标签描述
	 * @param string $value
	 * @return string
	 */
	public function getPostStatusLabel($value)
	{
		return isset(self::$statuses[$value]) ? self::$statuses[$value] : '';
	}
	
	/**
	 * 通过是否允许评论选项值，获取是否允许评论描述
	 * @param string $value
	 * @return string
	 */
	public function getAllowCommentLabel($value)
	{
		return isset(self::$allowComments[$value]) ? self::$allowComments[$value] : '';
	}
	
	/**
	 * 通过类别ID获取该类别下文档数
	 * @param integer $value
	 * @return integer
	 */
	public function countByCid($value)
	{
		$ret = $this->getService()->countByCid($value);
		if ($ret['err_no'] !== ErrorNo::SUCCESS_NUM) {
			return 0;
		}
		
		return $ret['total'];
	}
	
	/**
	 * 通过状态和ID获取操作Button
	 * @param string $status
	 * @param integer $id
	 * @return string
	 */
	public function getOperateLabel($status, $id)
	{
		if (!isset(self::$statuses[$status])) {
			return '';
		}
		
		$statuses = array(
			self::POST_STATUS_O => '开放浏览',
			self::POST_STATUS_C => '改为待审核',
			self::POST_STATUS_T => '放入回收站',
		);
		unset($statuses[$status]);
		
		$html = $this->getHtml()->a('修改', Util::getUrlByCtrl('edit', array('id' => $id)));
		foreach ($statuses as $status => $label) {
			$html .= ' | ' . $this->getHtml()->button(
				$label, 'btn_' . $id,
				array(
					'onclick' => 'return recycleRefresh(\'' . Util::getUrlByCtrl('edit_submit', array('id' => $id, 'status' => $status)) . '\', \'确定' . $label . '？\');'
				)
			);
		}
		
		return $html;
	}
}
